Grammar
The grammar for our language now looks like this:
\[ \definecolor{myblue}{RGB}{37, 104, 145} \newcommand{gt}[1]{{\color{myblue}\underline{#1}}\quad} \newcommand{gnt}[1]{\mathit{#1}\quad} \newcommand{\Program}{\gnt{Program}} \newcommand{\STR}{\gt{STR}} \newcommand{\Expr}{\gnt{Expr}} \newcommand{\Statements}{\gnt{Statements}} \newcommand{\Statement}{\gnt{Statement}} \newcommand{\INT}{\gt{INT}} \newcommand{\VAR}{\gt{VAR}} \newcommand{\ASSIGN}{\gt{:=}} \newcommand{\SEMI}{\gt{;}} \newcommand{\INPUT}{\gt{input}} \newcommand{\IF}{\gt{if}} \newcommand{\ELSE}{\gt{else}} \newcommand{\WHILE}{\gt{while}} \newcommand{\prod}{\rightarrow\quad} \newcommand{\alt}{\ |\ \quad} \]
\[ \begin{align} \Program \prod & \Statements\\ \\ \Statements \prod & \Statement \Statements \\ \alt & \epsilon\\ \\ \Statement \prod & \INPUT \VAR \SEMI \\ \alt & \gt{printString} \STR \SEMI \\ \alt & \gt{printNumber} \Expr \SEMI \\ \alt & \VAR \ASSIGN \Expr \SEMI \\ \alt & \IF \gt{(} \Expr \gt{)} \gt{\{} \Statements \gt{\}} \ELSE \gt{\{} \Statements \gt{\}}\\ \alt & \IF \gt{(} \Expr \gt{)} \gt{\{} \Statements \gt{\}}\\ \alt & \WHILE \gt{(} \Expr \gt{)} \gt{\{} \Statements \gt{\}}\\ \\ \Expr \prod & \Expr \gt{+} \Expr \\ \alt & \Expr \gt{-} \Expr \\ \alt & \Expr \gt{*} \Expr \\ \alt & \gt{(} \Expr \gt{)} \\ \alt & \INT\\ \alt & \VAR \end{align} \]